package com.mobile.tools;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URI;

import com.mobile.model.EduHallData;
import com.mobile.tools.exception.FileIsExistsException;
import com.mobile.tools.exception.FilePathException;
/**
 * 复制文件类
 * @author Administrator
 *
 */
public class CopyFile {
	/**
	 * 复制文件夹
	 * @param targetDir			目标文件
	 * @param sourceDir			源文件
	 * @throws Exception
	 */
	public static void copy(String targetDir,String sourceDir)throws Exception{
		File targetFile=new File(targetDir);
		File sourceFile=new File(sourceDir);
		if(sourceFile.isDirectory()){
			copyDir(targetFile,sourceFile);
		}else if(sourceFile.isFile()){
			copyFile(targetFile,sourceFile);
		}
	}
	/**
	 * 复制文件
	 * @param targetFileName			文件名
	 * @param sourceFilePath			源文件路径
	 * @throws FilePathException		
	 * @throws FileIsExistsException
	 */
	public static void copyFile(String targetFileName,String sourceFilePath)
		throws FilePathException,FileIsExistsException{
		File sourceFile=new File(sourceFilePath);
		if(!sourceFile.isFile()){
			throw new FilePathException("这不是文件的路径");
		}
		File targetFile=new File(sourceFile.getParent()+File.separator+targetFileName);
		try {
			if(targetFile.exists()){
				throw new FileIsExistsException("目标文件已经存在");
			}else{
				targetFile.createNewFile();
			}
			copyFile(targetFile,sourceFile);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	/**
	 * 复制文件
	 * @param targetFileName			文件名
	 * @param sourceFilePath			源文URI路径
	 * @throws FilePathException
	 * @throws FileIsExistsException
	 */
	public static void copyFile(String targetFileName,URI sourceFilePath)
	throws FilePathException,FileIsExistsException{
	File sourceFile=new File(sourceFilePath);
	if(!sourceFile.isFile()){
		throw new FilePathException("这不是文件的路径");
	}
	File targetFile=new File(sourceFile.getParent()+File.separator+targetFileName);
	try {
		if(targetFile.exists()){
			throw new FileIsExistsException("目标文件已经存在");
		}else{
			targetFile.createNewFile();
		}
		copyFile(targetFile,sourceFile);
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	
	}
	/**
	 * 复制文件夹
	 * @param targetFile		文件夹目标类
	 * @param sourceFile		源文件夹目标类
	 * @throws Exception
	 */
	public static void copyDir(File targetFile,File sourceFile)throws Exception{
		String[] fileNames=sourceFile.list();
		if(!sourceFile.exists()){
			throw new Exception("错误:"+"源目录或文件不存在");
		}
		if(!targetFile.exists()){
			targetFile.mkdir();
		}
		for(int i=0;i<fileNames.length;i++){
			String sourceChildString=sourceFile.getAbsolutePath()+File.separator+fileNames[i];
			String targetChildString=targetFile.getAbsolutePath()+File.separator+fileNames[i];
			File sourceChildFile=new File(sourceChildString);
			File targetChildFile=new File(targetChildString);
			if(sourceChildFile.isFile()){
				copyFile(targetChildFile,sourceChildFile);
			}else if(sourceChildFile.isDirectory()){
				copyDir(targetChildFile,sourceChildFile);
			}
		}
	}
	/**
	 * 复制文件
	 * @param targetFile		目标文件File类
	 * @param sourceFile		源文件File类
	 */
	public static void copyFile(File targetFile,File sourceFile){
		int bufSize=65536;
		try {
			if(!targetFile.exists()){
				targetFile.createNewFile();
			}
			FileInputStream fis=new FileInputStream(sourceFile.getAbsoluteFile());
			FileOutputStream fos=new FileOutputStream(targetFile.getAbsoluteFile());
			byte[] buf=new byte[bufSize];
			int s;
			while((s=fis.read(buf))>-1){
				fos.write(buf, 0, s);
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch(IOException e){
			e.printStackTrace();
		}
	}
	public static void main(String[] args)throws Exception{
		/*ry {
			//copy("F:\\copyTest\\target.txt","F:\\copyTest\\source.txt");
			copyFile("target.txt","F:\\copyTest\\source.txt");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}*/
		//String source=EduHallData.class.getResource("EduHallData01.hbm.xml");
		URI source=EduHallData.class.getResource("EduHallData01.hbm.xml").toURI();
		System.out.println(EduHallData.class.getResource("EduHallData01.hbm.xml"));
		try {
			CopyFile.copyFile("EduHallData02.hbm.xml" ,source);
		} catch (FilePathException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (FileIsExistsException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
}
